//
//  QNGCDTimer.h
//  GCD定时器
//
//  Created by rsh on 2020/7/20.
//  Copyright © 2020 rsh. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

// MARK: GCD定时器
// 由于 CADisplayLink 和 NSTimer 都是依赖 NSRunLoop的，所以存在不定时器不准问题


@interface QNGCDTimer : NSObject


/**
 * MARK: GCD定时器 -- block回调
 * @param task   执行任务block回调
 * @param start  开始时间（如：2s后开始）
 * @param interval  时间间隔
 * @param repeats  是否重复执行
 * @param async  是否异步线程执行
 * @return  返回当前执行的任务
 */
+ (NSString *)doTask:(void(^)(void))task
           start:(NSTimeInterval)start
        interval:(NSTimeInterval)interval
         repeats:(BOOL)repeats
           async:(BOOL)async;


/**
 * MARK: GCD定时器 -- selector
 * @param target   执行target
 * @param selector   执行方法selector
 * @param start  开始时间（如：2s后开始）
 * @param interval  时间间隔
 * @param repeats  是否重复执行
 * @param async  是否异步线程执行
 * @return  返回当前执行的任务
 */
+ (NSString *)doTask:(id)target
              selector:(SEL)selector
                 start:(NSTimeInterval)start
              interval:(NSTimeInterval)interval
               repeats:(BOOL)repeats
                 async:(BOOL)async;




/**
 * MARK: GCD定时器-- 取消对应任务的定时任务
 * @param name   当前执行的任务
 */
+ (void)cancelTask:(NSString *)name;


@end

NS_ASSUME_NONNULL_END
